﻿using System;
using System.Windows;
using GameEngine.View.Components;
using GameEngine.Model.Data;
using System.Collections.Generic;

namespace GameEditor.View.Components
{
    public class IGameEditorMenuViewConstants {
        public enum ButtonTags {
            SET, CANCEL,
            NEWLEVEL, EDITLEVEL, REMOVELEVEL, //COPYASNEWLEVEL,
            NEWTHINGTYPE, EDITTHINGTYPE, REMOVETHINGTYPE, COPYASNEWTHINGTYPE,
            NEWVIEW, EDITVIEW, REMOVEVIEW, COPYASNEWVIEW,
            NEWVIEWSTATE, EDITVIEWSTATE, REMOVEVIEWSTATE,
            NEWRESOURCE, EDITRESOURCE, REMOVERESOURCE, COPYASNEWRESOURCE,
        }
        //public const string SAVEBUTTON = "SAVEBUTTON";
        //public const string EXITBUTTON = "EXITBUTTON";
        //public const string NEWLEVELBUTTON = "NEWLEVELBUTTON";
        //public const string EDITLEVELBUTTON = "EDITLEVELBUTTON";
        //public const string NEWTHINGTYPEBUTTON = "NEWTHINGTYPEBUTTON";
        //public const string EDITTHINGTYPEBUTTON = "EDITTHINGTYPEBUTTON";
        //public const string NEWVIEWBUTTON = "NEWVIEWBUTTON";
        //public const string EDITVIEWBUTTON = "EDITVIEWTYPEBUTTON";
        //public const string NEWRESOURCEBUTTON = "NEWRESOURCEBUTTON";
        //public const string EDITRESOURCEBUTTON = "EDITRESOURCETYPEBUTTON";
    }

    public interface IGameEditorMenuView<IdType> : IMenuView<IGameEditorMenuViewConstants.ButtonTags>
        where IdType : IComparable<IdType>
   {
        string GameName
        {
            get;
            set;
        }

        Point TileSize
        {
            get;
            set;
        }
        float MaxMapHeight
        {
            get;
            set;
        }
        float MinMapHeight
        {
            get;
            set;
        }
        float TileHeightUnit
        {
            get;
            set;
        }

        void AddResource(IResourceVOId id);
        void RemoveResource(IResourceVOId id);
        List<IResourceVOId> GetResources();
        IResourceVOId SelectedResource { get; }

        void AddLevel(ILevelVOId id);
        void RemoveLevel(ILevelVOId id);
        List<ILevelVOId> GetLevels();
        ILevelVOId SelectedLevel { get; }

        void AddView(IViewVOId<IdType> id);
        void RemoveView(IViewVOId<IdType> id);
        List<IViewVOId<IdType>> GetViews();
        IViewVOId<IdType> SelectedView { get; }

        void AddViewState(IViewStateVO id);
        void RemoveViewState(IViewStateVO id);
        List<IViewStateVO> GetViewStates();
        IViewStateVO SelectedViewState { get; }

        void AddThingType(IThingTypeVOId id);
        void RemoveThingType(IThingTypeVOId id);
        List<IThingTypeVOId> GetThingTypes();
        IThingTypeVOId SelectedThingType { get; }
    }
}
